package main

import "fmt"

// 函数类型
func f1() {}

func f2() int {
	return 10
}

// 函数也可以作为参数类型
func f3(x func() int) {
	ret := x()
	fmt.Printf("f3 ret: %v\n", ret)
}

// 函数也可以作为返回值
func f4() func(int, int) int {
	ff := func(a, b int) int {
		return 10
	}
	return ff
}

func main() {
	a := f1
	fmt.Printf("a type:%T\n", a) // a type:func()
	b := f2
	fmt.Printf("b type:%T\n", b) // b type:func() int

	f3(f2) // f3 ret: 10

	num := f4()(1, 2)
	fmt.Printf("num: %v\n", num) // num: 10
}
